<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>轮播图</title>
    <style>
        html,body, #app{
            width: 100%;
            height: 100%;
            overflow: hidden;
        }
        *{
            margin:0;
            padding:0;
        }
        .container{
            width: 100%;
            height: 210px;
            position: relative;
        }
        .wrapper{
            position:absolute;
            left: 0;
            top: 0;
            list-style:none;
            width: 500%;
            height: 100%;
        }
        ul li{
            width: 20%;
            height: 100%;
            float:left;
        }
    </style>
</head>
<body>
    <div id="app">
        <div class="container">
            <ul class="wrapper">
                <li><img width="100%" src="./images/1.jpg" alt=""></li>
                <li><img width="100%" src="./images/2.jpg" alt=""></li>
                <li><img width="100%" src="./images/3.jpg" alt=""></li>
                <li><img width="100%" src="./images/4.jpg" alt=""></li>
                <li><img width="100%" src="./images/5.jpg" alt=""></li>
            </ul>
        </div>
    </div>
    <script>
        //阻止默认行为, 保持一致性
        let app = document.querySelector('#app');
        app.addEventListener('touchstart', function(e){
            e.preventDefault();
        });

        //获取元素
        const container = document.querySelector('.container');
        const wrapper = document.querySelector('.wrapper');
        const lis = wrapper.querySelectorAll('li'); 

        //绑定触摸开始
        container.addEventListener('touchstart', function(e){
            //获取触摸开始的水平位置
            this.x = e.changedTouches[0].clientX;
            //获取 wrapper 元素当前的所在位置 水平方向
            this.l = wrapper.offsetLeft;
            //移除过渡效果
            wrapper.style.transition = 'none';
        });

        //触摸移动
        container.addEventListener('touchmove', function(e){
            //获取手指滑动之后, 水平方向的位置
            this._x = e.changedTouches[0].clientX;
            //计算新的 left 的值
            let newLeft = this._x - this.x + this.l;
            //设置 left 样式即可
            wrapper.style.left = newLeft + 'px';
        });

        //手指离开
        container.addEventListener('touchend', function(e){
            //过渡效果添加
            wrapper.style.transition = 'all 0.5s';

            //获取手指抬起时, wrapper 的所在位置, 水平方向
            let left = wrapper.offsetLeft;
            //快速计算当前应该显示的下标
            let index = Math.round(-left / container.offsetWidth);
            //判断 index
            if(index <= 0) index = 0;
            if(index >= lis.length - 1) index = lis.length - 1;
            //显示指定索引的图片  
            /**
             * 0   0
             * 1   -375
             * 2   -750
             * n   -375*n
             */
            let newLeft = -index * container.offsetWidth;
            //设置
            wrapper.style.left = newLeft + 'px';
        });


    </script>
</body>
</html>